// 检验手机号
export const checkPhone = (val)=> {
  if (!(/^1[345789]\d{9}$/.test(val))) {
    return false;
  }
}    

// 检验密码 (8~20位)
export const checkPwd = (val) => {
  if (!(/^(?=.*[a-z A-Z])(?=.*\d)[^]{8,20}$/.test(val))) {
    return false;
  }
}    

//银行卡号Luhn校验算法
//luhn校验规则：16位银行卡号（19位通用）: 
//1.将未带校验位的 15（或18）位卡号从右依次编号 1 到 15（18），位于奇数位号上的数字乘以 2。
//2.将奇位乘积的个十位全部相加，再加上所有偶数位上的数字。
//3.将加法和加上校验位能被 10 整除。

//bankno为银行卡号
function luhnCheck(bankno) {
  var lastNum = bankno.substr(bankno.length - 1, 1);//取出最后一位（与luhn进行比较）

  var first15Num = bankno.substr(0, bankno.length - 1);//前15或18位
  var newArr = new Array();
  for (var i = first15Num.length - 1; i > -1; i--) {    //前15或18位倒序存进数组
    newArr.push(first15Num.substr(i, 1));
  }
  var arrJiShu = new Array();  //奇数位*2的积 <9
  var arrJiShu2 = new Array(); //奇数位*2的积 >9

  var arrOuShu = new Array();  //偶数位数组
  for (var j = 0; j < newArr.length; j++) {
    if ((j + 1) % 2 == 1) {//奇数位
      if (parseInt(newArr[j]) * 2 < 9)
        arrJiShu.push(parseInt(newArr[j]) * 2);
      else
        arrJiShu2.push(parseInt(newArr[j]) * 2);
    }
    else //偶数位
      arrOuShu.push(newArr[j]);
  }

  var jishu_child1 = new Array();//奇数位*2 >9 的分割之后的数组个位数
  var jishu_child2 = new Array();//奇数位*2 >9 的分割之后的数组十位数
  for (var h = 0; h < arrJiShu2.length; h++) {
    jishu_child1.push(parseInt(arrJiShu2[h]) % 10);
    jishu_child2.push(parseInt(arrJiShu2[h]) / 10);
  }

  var sumJiShu = 0; //奇数位*2 < 9 的数组之和
  var sumOuShu = 0; //偶数位数组之和
  var sumJiShuChild1 = 0; //奇数位*2 >9 的分割之后的数组个位数之和
  var sumJiShuChild2 = 0; //奇数位*2 >9 的分割之后的数组十位数之和
  var sumTotal = 0;
  for (var m = 0; m < arrJiShu.length; m++) {
    sumJiShu = sumJiShu + parseInt(arrJiShu[m]);
  }

  for (var n = 0; n < arrOuShu.length; n++) {
    sumOuShu = sumOuShu + parseInt(arrOuShu[n]);
  }

  for (var p = 0; p < jishu_child1.length; p++) {
    sumJiShuChild1 = sumJiShuChild1 + parseInt(jishu_child1[p]);
    sumJiShuChild2 = sumJiShuChild2 + parseInt(jishu_child2[p]);
  }
  //计算总和
  sumTotal = parseInt(sumJiShu) + parseInt(sumOuShu) + parseInt(sumJiShuChild1) + parseInt(sumJiShuChild2);

  //计算luhn值
  var k = parseInt(sumTotal) % 10 == 0 ? 10 : parseInt(sumTotal) % 10;
  var luhn = 10 - k;

  if (lastNum == luhn) {
    console.log("验证通过");
    return true;
  } else {
    console.log("银行卡号必须符合luhn校验");
    return false;
  }
}

//检查银行卡号 CheckBankNo
export function CheckBankNo(bankno,fun) {
  var bankno = bankno.replace(/\s/g, '');
  if (bankno == "") {
    console.log("请填写银行卡号");
    return false;
  }
  if (bankno.length < 16 || bankno.length > 19) {
    console.log("银行卡号长度必须在16到19之间");
    return false;
  }
  var num = /^\d*$/;//全数字
  if (!num.exec(bankno)) {
    console.log("银行卡号必须全为数字");
    return false;
  }
  //开头6位
  var strBin = "10,18,30,35,37,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,58,60,62,65,68,69,84,87,88,94,95,98,99";
  if (strBin.indexOf(bankno.substring(0, 2)) == -1) {
    console.log("银行卡号开头6位不符合规范");
    return false;
  }
  //Luhn校验
  if (!luhnCheck(bankno)) {
    return false;
  }
  //   console.log(luhnCheck(bankno));

  return true;
}

//*********************************时间格式化************************************************** */

export function formatDate(time, format = 'YY-MM-DD hh:mm:ss') {
  var date = new Date(time);

  var year = date.getFullYear(),
    month = date.getMonth() + 1,//月份是从0开始的
    day = date.getDate(),
    hour = date.getHours(),
    min = date.getMinutes(),
    sec = date.getSeconds();
  var preArr = Array.apply(null, Array(10)).map(function (elem, index) {
    return '0' + index;
  });////开个长度为10的数组 格式为 00 01 02 03

  var newTime = format.replace(/YY/g, year)
    .replace(/MM/g, preArr[month] || month)
    .replace(/DD/g, preArr[day] || day)
    .replace(/hh/g, preArr[hour] || hour)
    .replace(/mm/g, preArr[min] || min)
    .replace(/ss/g, preArr[sec] || sec);

  return newTime;
}

/**************************交互反馈*****************************/ 
/**
 * @explain array 是数组类型
 * @param array[0] text
 * @param array[1] icon
 * @param array[2] duration
 * @param fun (success,fail,complete)
 * **/ 
export function showToast(array,fun){
  let showToastObj;
  if (!showToastObj){
    showToastObj = {
      title: array[0],
      icon: array[1] ? array[1] : "none",
      mask: true,
      duration: array[2] ? array[2] : 1500
    };
  }

  if(typeof fun === "function"){
    showToastObj[fun()];
  }
  
  wx.showToast(showToastObj);
}